/* / lightSetting represents a set of bits corresponding to the lights that are on//off / Ex: 0b1001 - {on, off, off, on} */ void LightController::setLights(int lightSetting){ for(int i = 0; i < numLights; i++){ if(readLight(lightSetting, i)){ digitalWrite(lights[i], HIGH); } else { digitalWrite(lights[i], LOW); } } }
/*=============<< main >>==============* * Get that party started! * * Initialize for rendering and audio. * *=====================================*/ int main(int argc, char* argv[]) { // Audio vars SDL_AudioSpec want, have; SDL_AudioDeviceID dev; wavedata my_wavedata; // Rendering vars SDL_Window *window; SDL_Renderer *renderer; SDL_Event event; // Text vars TTF_Font* font; SDL_Surface *surfaceMessage; SDL_Texture *message; SDL_Rect message_rect; SDL_Surface *noteMessage; SDL_Texture *nmessage; SDL_Rect nmessage_rect; // Keycode for key presses SDL_Keycode key; /*******<Initial Settings>*******/ // Initialize with appropriate flags if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO | SDL_INIT_TIMER) < 0 || TTF_Init() < 0) return 1; atexit(SDL_Quit); // Set exit function s.t. SDL resources deallocated on quit /* ======<< AUDIO SETTINGS >>======= */ SDL_memset(&want, 0, sizeof(want)); createWant(&want, &my_wavedata); // Call function to initialize vals dev = SDL_OpenAudioDevice(NULL, 0, &want, &have, SDL_AUDIO_ALLOW_FORMAT_CHANGE); if (dev == 0) printf("Error opening audio device: %s\n", SDL_GetError()); /* ======<< RENDERING SETTINGS >====== */ // Create window and renderer window = SDL_CreateWindow("SDL_RenderClear", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 512, 512, 0); renderer = SDL_CreateRenderer(window, -1, 0); /* Text */ // Opens font //font = TTF_OpenFont("/Library/Fonts/Arial.ttf", 12); font = TTF_OpenFont("/usr/share/fonts/Droid/Roboto_Regular.ttf"); if(font == NULL) { printf("Font not found\n"); return 1; } SDL_Color normalFontColor = {50, 170, 255}; // Darker blue SDL_Color cbFontColor = {80, 100, 80}; // Weird green SDL_Color fontColor = normalFontColor; /*********< Okay, game time! >***********/ while (!quit) { //get current light level updateWavedata(&my_wavedata, readLight()); /* ==========<< Poll for events >>============ */ while (SDL_PollEvent(&event)) { switch (event.type) { /* Key pressed */ case SDL_KEYDOWN: key = event.key.keysym.sym; /* Quit */ if (key == SDLK_ESCAPE || key == SDLK_q) { quit = 1; } /* Raise pitch by one note */ else if (key == SDLK_UP && my_wavedata.pitchindex < 7) { updateWavedata(&my_wavedata, my_wavedata.pitchindex+1); printf("%d\n", my_wavedata.pitchindex); } /* Lower pitch by one note */ else if (key == SDLK_DOWN && my_wavedata.pitchindex > 0) { updateWavedata(&my_wavedata, my_wavedata.pitchindex-1); printf("%d\n", my_wavedata.pitchindex); } /* Change to colorblind mode */ else if (key == SDLK_BACKSPACE) { colorblind = (colorblind+1)%2; } /* Change instruments */ else if (key == SDLK_i) { instr = (instr == PIANO) ? GUITAR : PIANO; updateWavedata(&my_wavedata, my_wavedata.pitchindex); } /* Mute */ else if (key == SDLK_m) { mute = (mute+1)%2; } break; /* Exit */ case SDL_QUIT: quit = 1; break; default: break; } } /* ========<< Text >>======== */ // Set font color fontColor = normalFontColor; if (colorblind) { fontColor = cbFontColor; } // Create surface and convert it to texture surfaceMessage = TTF_RenderText_Solid(font, "Theremin Hero!", fontColor); if (colorblind) { surfaceMessage = TTF_RenderText_Solid(font, "Colorblind Mode ;D", fontColor); } message = SDL_CreateTextureFromSurface(renderer, surfaceMessage); // {xPos, yPos, width, height} message_rect.x = 150; message_rect.y = 200; message_rect.w = 200; message_rect.h = 80; /* Shows note on screen */ noteMessage = TTF_RenderText_Solid(font, pitchNames[my_wavedata.pitchindex], fontColor); nmessage = SDL_CreateTextureFromSurface(renderer, noteMessage); nmessage_rect.x = 210; nmessage_rect.y = 350; nmessage_rect.w = 100; nmessage_rect.h = 50; /* ========<< Background >>========= */ // Choose background color SDL_SetRenderDrawColor(renderer, 170, 200, 215, 255); // Light blue if (colorblind) { SDL_SetRenderDrawColor(renderer, 90, 60, 80, 255); // Dark magenta } // Set background color SDL_RenderClear(renderer); SDL_SetRenderDrawColor(renderer, 200, 255, 0, 255); // Green SDL_RenderDrawLine(renderer, 5, 5, 340, 340); // Awkward diagonal line // Render message texture SDL_RenderCopy(renderer, message, NULL, &message_rect); SDL_RenderCopy(renderer, nmessage, NULL, &nmessage_rect); // Move to foreground SDL_RenderPresent(renderer); /* =========<< Audio >>========== */ SDL_PauseAudioDevice(dev, mute); } // CLEAN YO' ROOM (Cleanup) TTF_CloseFont(font); SDL_CloseAudioDevice(dev); SDL_Quit(); return 0; }
application_event_result application_event(application_request* request, buffer_read_t* read_buffer, buffer_write_t* write_buffer) { switch(request->queryId) { case 1: { // <query name="light_write.json" description="Turn light on and off" id="1"> // <request> // <parameter name="light_id" type="uint8"/> // <parameter name="light_on" type="uint8"/> // </request> // <response> // <parameter name="light_state" type="uint8"/> // </response> // </query> uint8_t light_id; uint8_t light_on; uint8_t light_state; // Read parameters in request if (!buffer_read_uint8(read_buffer, &light_id)) { NABTO_LOG_ERROR(("Can't read light_id, the buffer is too small")); return AER_REQ_TOO_SMALL; } if (!buffer_read_uint8(read_buffer, &light_on)) { NABTO_LOG_ERROR(("Can't read light_state, the buffer is too small")); return AER_REQ_TOO_SMALL; } // Set light according to request light_state = setLight(light_id, light_on); // Write back led state if (!buffer_write_uint8(write_buffer, light_state)) { return AER_REQ_RSP_TOO_LARGE; } return AER_REQ_RESPONSE_READY; } case 2: { // <query name="light_read.json" description="Read light status" id="2"> // <request> // <parameter name="light_id" type="uint8"/> // </request> // <response> // <parameter name="light_state" type="uint8"/> // </response> // </query> uint8_t light_id; uint8_t light_state; // Read parameters in request if (!buffer_read_uint8(read_buffer, &light_id)) return AER_REQ_TOO_SMALL; // Read light state light_state = readLight(light_id); // Write back led state if (!buffer_write_uint8(write_buffer, light_state)) return AER_REQ_RSP_TOO_LARGE; return AER_REQ_RESPONSE_READY; } } return AER_REQ_INV_QUERY_ID; }
int main(int argc, char** argv) { printf("i2c c test.\n"); int fd[2]; unsigned char buf[10]; char *fileName = "/dev/i2c-1"; int addr[2] = {0x29, 0x39}; // Adressen der Chips openPort(&fd[0]); openPort(&fd[1]); addSlave(addr[0], &fd[0]); addSlave(addr[1], &fd[1]); int i; int readcount[2] = {0, 1}; double maxlux = 0.0; int maxCh0 = 0; //Variablen zur Berechnung des Lichteinfalls int cLow[2] = {65536, 65536}; int cHigh[2] = {0, 0}; double cc[2] = {0.0, 0.0}; double maxcc[2] = {0.0, 0.0}; double lastcc[2] = {0.0, 0.0}; double epsilon = 0.01; //Variablen zur Aktivierung der Dosen: int active[2] = {0, 0}; double actThr = 0.1; //Schwellenwert um Verdunklung zu erkennen //initialisiere OSC: lo_address oscaddr = initOSC("192.168.1.8", "7777"); while(1) { for(i = 0; i < 2; i++) { cc[i] = readLight(&fd[i], &cLow[i], &cHigh[i]); readcount[i]++; if(cc[i] > maxcc[i]) { maxcc[i] = cc[i]; } if(readcount[i] >= 3) { if(active[i]) { if((lastcc[i] > maxcc[i] + epsilon) || (lastcc[i] < maxcc[i] - epsilon)) { //Lichtintensitaet hat sich signifikant geaendert -> Ausgabe! printf("%d Licht: %f\n", i, maxcc[i]); if(i == 0) sendOSC(&oscaddr, "/licht0", maxcc[i]); else if(i == 1) sendOSC(&oscaddr, "/licht1", maxcc[i]); lastcc[i] = maxcc[i]; } } else { if(maxcc[i] > (1.0 - actThr)) { printf("Dose %d ist jetzt aktiv.\n", i); active[i] = 1; } } readcount[i] = 0; maxcc[i] = 0.0; } } /* lo_address t = lo_address_new("192.168.1.8", "7777"); if(lo_send(t, "/light", "f", cc) == -1) { printf("OSC Fehler: %s\n", lo_address_errstr(t)); }*/ usleep(13 * 1000); } return 0; }