Light Cube/Projektcode: Unterschied zwischen den Versionen

Aus C3MAWiki
KKeine Bearbeitungszusammenfassung
KKeine Bearbeitungszusammenfassung
Zeile 112: Zeile 112:
  end
  end
  tmr.alarm(0, 100, tmr.ALARM_AUTO, wlaninit)
  tmr.alarm(0, 100, tmr.ALARM_AUTO, wlaninit)
== Eclipse - Computer ==
package berkay.light.cube;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class LightCube {
public static int LED_COUNT = 34;
private static ObjectMapper mapper;
private List<Led> leds = new ArrayList<>();   
private String host;
private int port;
private Socket outsocket;
public LightCube(String ip, int port) throws UnknownHostException, IOException { 
this.host = ip;
this.port = port;
for (int i = 0; i < LED_COUNT; i++) {
leds.add(new Led());
}
outsocket = new Socket(this.host, this.port);
}
private void send() throws Exception {
String json = mapper.writeValueAsString(leds);
System.out.println(json);
PrintStream jsonOut = new PrintStream(outsocket.getOutputStream());
jsonOut.print(json);
jsonOut.flush();
}
public static void main(String[] args) throws InterruptedException, UnknownHostException, IOException {
mapper = new ObjectMapper();
Scanner scanner = new Scanner(System.in);
LightCube l1 = new LightCube("192.168.2.109", 80);   
LightCube l2 = new LightCube("192.168.2.110", 80);
System.out.println("Verbindung erfolgreich");
while (true) {
try {
if (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] parts = line.split(" ");
if (parts.length < 4 || parts.length > 5) {
throw new IllegalStateException("requires 3 or 4 numbers");
}
int remote = Integer.parseInt(parts[0]);
int r = Integer.parseInt(parts[1]);
int g = Integer.parseInt(parts[2]);
int b = Integer.parseInt(parts[3]);
LightCube ll = null;
if(remote == 0){
ll = l1;
}
if(remote == 1){
ll = l2;
}
int index = -1;
if(parts.length == 5){
index = Integer.parseInt(parts[4]);
}
if(index == -1){
//set all
for(Led led:ll.leds){
led.setColor(r, g, b);
}
}else{
if(index < 0 ){
index = 0;
}
if(index > LED_COUNT-1){
index = LED_COUNT-1;
}
Led led = ll.leds.get(index);
led.setColor(r, g, b);
}
}
l2.send();
l1.send();
} catch (Exception e) {
e.printStackTrace();
}
Thread.sleep(500);
}
}
}

Version vom 1. Dezember 2016, 21:33 Uhr

Dies ist ein Projekt, an dem momentan aktiv gearbeitet wird. Wenn du Fragen hast oder mitarbeiten möchtest, wende dich an Berkay.

Dies ist der vollständige Projektcode. Die Projektseite: Light Cubes


ESP-Platine/Bauteil ESP NodeMCU Devboard

   wifi.setmode(wifi.STATION)
   wifi.sta.config("SSID", "PW")
  ws2812.init();   
local ledCount = 34;
local leds = string.char(10,00,0):rep(ledCount) 
local hadIP = false;
local tick = false;
function readjson(data)
   ok, json = pcall(cjson.decode, data)  
   if ok then
       leds = ""
       for ledid = 1, ledCount, 1 do
           local ledData = json[ledid];
           leds = leds .. string.char(ledData.g,ledData.r,ledData.b)
       end
   else
   print("failed to decode!")
   end
end
local pseudoRemote = {}
for ledid = 1, ledCount, 1 do
   pseudoRemote[ledid]={}
   pseudoRemote[ledid].r=100
   pseudoRemote[ledid].g=0
   pseudoRemote[ledid].b=ledid
end
local remoteData = cjson.encode(pseudoRemote);
print(remoteData)
local srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
   conn:on("receive",function(conn,payload)
       print("Got something...")
       print(payload);
       readjson(payload)
       conn:send("HTTP/1.1 200 OK\n")
       conn:send("Content-Type: text/html\n\n")
   end)
end)
local led1 = 0;
local led2 = 0;
local led3 = 0;
function countBlinks(eingabe)
   while(eingabe > 0) do
       if(eingabe >= 100) then
           led1 = led1 +1
           eingabe = eingabe -100
       else
           if(eingabe >= 10) then
               led2 = led2 +1
               eingabe = eingabe -10
           else
               led3 = led3 +1
               eingabe = eingabe -1
            end
        end
    end
end
function update()
    ws2812.write(leds) 
end
local anSekunde = false;
function blinkIP()
   anSekunde = not anSekunde
   if(anSekunde) then
       if led1 > 0 then
           ws2812.write(string.char(0,20,0)) 
           led1 = led1 -1
           return
       end
       if (led2 > 0) then
           ws2812.write(string.char(0,0,0) .. string.char(0,20,0)) 
           led2 = led2 -1
           return
       end
       if (led3 > 0) then
           ws2812.write(string.char(0,0,0):rep(2) .. string.char(0,20,0)) 
           led3 = led3 -1
           return
       end
       tmr.alarm(0, 100, tmr.ALARM_AUTO, update)  
   else
       ws2812.write(string.char(00,0,0):rep(ledCount))     
    end
end
function wlaninit ()
   if(not wifi.sta.getip())then  
       tick = not tick;
       if(tick)then
           ws2812.write(string.char(0,0,20):rep(ledCount)) 
       else 
           ws2812.write(string.char(0,0,0):rep(ledCount)) 
       end
       return;
   else
       if not hadIP then
          hadIP = true
          local IP = wifi.sta.getip()
          local o1,o2,o3,o4 = IP:match("(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)%.(%d%d?%d?)" )
          local eingabe = tonumber(o4)
          countBlinks(eingabe);          
          tmr.alarm(0, 1000, tmr.ALARM_AUTO, blinkIP) 
        end
    end
end
tmr.alarm(0, 100, tmr.ALARM_AUTO, wlaninit)


Eclipse - Computer

package berkay.light.cube;
import java.io.IOException; 
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class LightCube {

public static int LED_COUNT = 34; private static ObjectMapper mapper; private List<Led> leds = new ArrayList<>(); private String host; private int port; private Socket outsocket;

public LightCube(String ip, int port) throws UnknownHostException, IOException { this.host = ip; this.port = port; for (int i = 0; i < LED_COUNT; i++) { leds.add(new Led()); } outsocket = new Socket(this.host, this.port); }

private void send() throws Exception { String json = mapper.writeValueAsString(leds); System.out.println(json);

PrintStream jsonOut = new PrintStream(outsocket.getOutputStream()); jsonOut.print(json); jsonOut.flush(); }

public static void main(String[] args) throws InterruptedException, UnknownHostException, IOException { mapper = new ObjectMapper();

Scanner scanner = new Scanner(System.in);

LightCube l1 = new LightCube("192.168.2.109", 80); LightCube l2 = new LightCube("192.168.2.110", 80);

System.out.println("Verbindung erfolgreich");

while (true) { try { if (scanner.hasNextLine()) { String line = scanner.nextLine(); String[] parts = line.split(" "); if (parts.length < 4 || parts.length > 5) { throw new IllegalStateException("requires 3 or 4 numbers"); } int remote = Integer.parseInt(parts[0]); int r = Integer.parseInt(parts[1]); int g = Integer.parseInt(parts[2]); int b = Integer.parseInt(parts[3]);

LightCube ll = null; if(remote == 0){ ll = l1; } if(remote == 1){ ll = l2; } int index = -1; if(parts.length == 5){ index = Integer.parseInt(parts[4]); } if(index == -1){ //set all for(Led led:ll.leds){ led.setColor(r, g, b); } }else{ if(index < 0 ){ index = 0; } if(index > LED_COUNT-1){ index = LED_COUNT-1; } Led led = ll.leds.get(index); led.setColor(r, g, b); } } l2.send(); l1.send(); } catch (Exception e) { e.printStackTrace(); }

Thread.sleep(500); } }

}